﻿using PhraseCorrector.Common;
using PhraseCorrector.SimplePinyin;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace PhraseCorrector.WordLineSplit
{

    /// <summary>
    /// 词行分割类
    ///   1. 输入：字符串，比如："我是No1中国人"
    ///   2. 词行分割结果：分词结果，
    ///         CHinese：我是中国人
    ///         English：no
    ///         Digits:：1
    /// </summary>
    public class LineWordSplit
    {

        #region 成员变量

        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 属性: 保存ECResult类型的结果对象
        /// </summary>
        private PhraseResult Result { set; get; }= new PhraseResult();

        #endregion

        #region 静态调用入口
        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 分割词行方法
        /// </summary>
        /// <param name="source">待分割的字符串</param>
        /// <returns>返回分割结果</returns>
        public static PhraseResult Split(string source)
        {
            // 创建LineWordSplit实例并传入源字符串，调用其实例化时的结果
            return new LineWordSplit(source).Result;
        }
        
        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 匹配字符串的正则表达式
        /// </summary>
         private static readonly Regex FilterChinese= new Regex(@"[^一-龥]", RegexOptions.Compiled);

        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 匹配非中文字符的正则表达式
        /// </summary>
        private static readonly Regex FilterLetter= new Regex(@"[^A-Za-z]", RegexOptions.Compiled);

        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 匹配非字母字符的正则表达式
        /// </summary>
        private static readonly Regex FilterDigits= new Regex(@"[^0-9]", RegexOptions.Compiled);

        #endregion

        #region 私有方法

        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 构造函数，初始化LineWordSplit对象并处理源字符串
        /// </summary>
        /// <param name="source">待处理的源字符串</param>
        public LineWordSplit(string source)
        {
            if (source== null) return;
            // 遍历拆分后的每个单词，将其添加到结果中
            SplitWord(source);
        }

        // ///////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 将输入字符串中的单词拆分为数组
        /// </summary>
        /// <param name="input">待拆分的字符串</param>
        /// <returns>包含拆分后单词的字符串数组</returns>
        private void SplitWord(string input)
        {
            Result = new PhraseResult()
            {
                // 提取中文字符
                Chinese= FilterChinese.Replace(input, ""),
                // 提取字母
                Words= FilterLetter.Replace(input, "").ToLower(),
                // 提取数字
                Digits= FilterDigits.Replace(input, "")
            };
        }

        #endregion
    }
}
